CloudFront のオリジンに EC2 を置いてアクセスログを Athena で分析してみた ①
いつもはそんなに寒くならないのに、今冬はなぜか-16度とかになっているバンクーバーにいる者です。
先日 CloudFront のオリジンに EC2 を置いてアクセスログを取得して Athena で分析するまでを検証する機会がありました。今回はそのうちの CloudFront 〜 アクセスログ取得までを記事にしたいと思います。
EC2
インスタンスの起動
オレゴンリージョンのパブリックサブネット上に t2.micro の EC2 インスタンスを起動させました。
※ VPC 作成 〜 EC2 インスタンスの起動までの手順は以下の弊社ブログに説明がありますので、必要に応じてご確認ください。
SSH 接続
インスタンス名の左横にあるチェックボックスにチェックを入れたら、「接続」ボタンをクリックします。そして「SSH クライアント」のタブを選択します。
表示された手順に沿ってコマンドを実行すると SSH 接続が可能です。私はターミナルを使用して接続を行いました。
EC2 のロゴが確認できたら、接続成功です。
__| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/
Apache を起動させる
sudo yum update
でパッケージ更新を行います。
$ sudo yum update
sudo yum install httpd
で Apache をインストールします。
$ sudo yum install httpd
cd /var/www/html
でドキュメントルートに移動します。
$ cd /var/www/html
ls -la
でファイルおよびディレクトリを確認します。
$ ls -la total 0 drwxr-xr-x 2 root root 6 Oct 8 22:04 . drwxr-xr-x 4 root root 33 Jan 2 08:13 ..
sudo vim index.html
で Web ページとなるファイルを作成します。
$ sudo vim index.html
i
と入力して insert モードに変更し、以下の内容をペーストします。
そして「esc」を押した後に:wq
と入力して脱出します。
<p>test</p>
cat index.html
を実行して<p>test</p>
が返却されることを確認してください。
$ cat index.html <p>test</p>
念の為 ls -la
で index.html が生成されていることを確認します。
$ ls -la total 4 drwxr-xr-x 2 root root 24 Jan 2 08:17 . drwxr-xr-x 4 root root 33 Jan 2 08:13 .. -rw-r--r-- 1 root root 12 Jan 2 08:17 index.html
sudo systemctl start httpd
で Apache の起動を行い、sudo systemctl enable httpd.service
で Apache の自動起動もオンにしておきます。
$ sudo systemctl start httpd $ sudo systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
ブラウザで EC2 インスタンスのパブリック IP を叩いて、「test」と表示されることが確認できたら OK です。
S3
CloudFront のログを保存するための S3 バケットを作成します。
バケット名を指定し、先ほど EC2 を作成したのと同じリージョンを選択します。
また、「オブジェクト所有者」の項目で「ACL を有効」を選択してください。
※ ここを無効にすると CloudFront の設定時にエラーが出るので注意です。
その他の設定はそのままで「バケットを作成」を選択します。
CloudFront
CloudFront コンソールを開き、「ディストリビューションを作成」を選択します。オリジンドメインに先ほど起動させた EC2 インスタンスのパブリック DNS を入力します。
※ 検索バーの候補には表示されないので、EC2 コンソールからパブリック DNS をコピーしてここにペーストしてください。
「標準ログ記録」をオンにして S3 バケットの項目で先ほど作成した S3 バケットを指定します。
その他の設定はそのままで「ディストリビューションを作成」を選択します。
ステータスがデプロイから有効になるのを待ちます。
ブラウザで CloudFront のドメインを叩いて、「test」と表示されることを確認します。
アクセスログが生成されているか確認
少し時間を置いて作成した S3 バケットにアクセスして、バケット内に「.gz」で終わるオブジェクトが作成されていれば成功です。
終わりに
S3 の権限周りで少々戸惑うところがありましたが、ここまで無事に終えられてよかったです。
Lambda で S3 オブジェクトの配置を整えて Athena での分析を行うまでは、次回の記事にします。
追記:続編を投稿しました。